/**
 *
 * @file TypeEnum.h
 *
 *  @date Aug 8, 2012
 *   @author: calle
 */

#ifndef TYPEENUM_H_
#define TYPEENUM_H_

#include <Interfaces/Enumeration.h>
#include <AbsSyn/GenExpClasses/ExpressionType.h>

/**
 * \class TypeEnum TypeEnum.h <AbsSyn/TypeEnum.h>
 *
 * \brief Enumeration class for the available types
 *
 * TypeEnum are those types that are available in the system
 * Right now these are available
 *
 *    - BoolType boolean (true false)
 *    - IntType integer type
 *    - DoubleType double
 *
 *    \ingroup Enumerations
 */


class TypeEnum: public Enumeration<TypeEnum> {
public:
	TypeEnum(const char* image);
	virtual ~TypeEnum();

	const static TypeEnum BoolT;
	const static TypeEnum IntT;
	const static TypeEnum DoubleT;

	/**
	 * \brief get the constant expression type for a type
	 *
	 * When generating expression, the type is available but sometimes
	 * its necessary to have the corresponding expression type.
	 * For example: BootT \rightarrow BOOL_EXP
	 * This method provides such functionality for constants.
	 *
	 * @param type
	 * @return Expression Constant Type
	 */
	static ExpressionType getConstantExpressionType(TypeEnum type);
};

#endif /* TYPEENUM_H_ */
